home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 February: Tool Chest / Dev.CD Feb 99 TC.toast / Tool Chest / Development Kits / MPW etc / Miscellaneous / ThreeWayMerge / ThreeWayMerge.Action < prev    next >
Encoding:
Text File  |  1996-02-26  |  5.8 KB  |  185 lines  |  [TEXT/MPS ]

  1. #
  2. #    File:        ThreeWayMerge.Action
  3. #
  4. #    Contains:    xxx put contents here xxx
  5. #
  6. #                 This script is subroutine called by the main ThreeWayMerge script
  7. #                 to process each change record.
  8. #
  9. #    Owned by:    Jens Alfke, William Cook, Alex McKale
  10. #
  11. #    Copyright:    © 1992,1995-1996 by Apple Computer, Inc., all rights reserved.
  12. #
  13. #    Change History (most recent first):
  14. #
  15. #         <2>     2/26/96    agm     cleaned up for ETO 20.
  16. #         <1>     5/25/95    jpa        first checked in
  17. #
  18.  
  19. # variable dictionary
  20. #
  21. #    InConflict        true if we are in a conflict
  22. #    ConflictEnd        position of end of current conflict    
  23. #    SameChanges        true if the two versions made the same changes
  24. #    CopyEnd            temporary indicating where to stop copying output
  25. #    CopyStart
  26. #
  27. #    ConflictEnd1
  28. #    ConflictFile1
  29. #    CopyEnd1
  30. #    CopyStart1
  31. #
  32. #    ConflictEnd2
  33. #    ConflictFile2
  34. #    CopyEnd2
  35. #    CopyStart2
  36. #
  37. #    LastChangeEnd    previous versions of above verables
  38. #    LastChangeStart
  39. #    LastFileName
  40. #    LastNewEnd
  41. #    LastNewStart
  42.  
  43. #echo "#### {ChangeStart}:{ChangeEnd} {NewStart}:{NewEnd} {FileName} inconf={InConflict} copyS={CopyStart} confE={ConflictEnd}"
  44.  
  45. if "{InConflict}" == 1
  46.     # lets see if we are out of the conflict
  47.     if "{ConflictEnd}" >= "{ChangeStart}"
  48.         # still in conflict.
  49.         if "{FileName}" == "{ConflictFile1}"
  50.             # append to conflict1
  51.             Set ConflictEnd1    "{ChangeEnd}"
  52.             Set CopyEnd1        "{NewEnd}"
  53.         else
  54.             Set ConflictEnd2    "{ChangeEnd}"
  55.             Set CopyEnd2        "{NewEnd}"
  56.         end
  57.         if "{ChangeEnd}" > "{ConflictEnd}"
  58.             Set ConflictEnd "{ChangeEnd}"
  59.         end
  60.         Set LastFileName    "{FileName}"
  61.         Exit
  62.     else
  63.         # we are out of the conflict
  64.         Set CopyEnd1 `evaluate "{CopyEnd1}" + "{ConflictEnd}" - "{ConflictEnd1}"`
  65.         If "{CopyStart1}" < "{CopyEnd1}"
  66.             #echo "#### {ConflictFile1} {CopyStart1}:{CopyEnd1}"
  67.             streamedit -d -e "{CopyStart1},{CopyEnd1} print" "{ConflictFile1}" > "{TempFolder}ThreeWayMerge•Conflict1"
  68.         Else 
  69.             If "{CopyStart1}" == "{CopyEnd1}"
  70.                 #echo "#### {ConflictFile1} {CopyStart1}"
  71.                 streamedit -d -e "{CopyStart1} print" "{ConflictFile1}" > "{TempFolder}ThreeWayMerge•Conflict1"
  72.             End
  73.         Else
  74.             echo -n > "{TempFolder}ThreeWayMerge•Conflict1"
  75.         End
  76.         Set CopyEnd2 `evaluate "{CopyEnd2}" + "{ConflictEnd}" - "{ConflictEnd2}"`
  77.         If "{CopyStart2}" < "{CopyEnd2}"
  78.             #echo "#### {ConflictFile2} {CopyStart2}:{CopyEnd2}"
  79.             streamedit -d -e "{CopyStart2},{CopyEnd2} print" "{ConflictFile2}" > "{TempFolder}ThreeWayMerge•Conflict2"
  80.         Else 
  81.             If "{CopyStart2}" == "{CopyEnd2}"
  82.                 #echo "#### {ConflictFile2} {CopyStart2}"
  83.                 streamedit -d -e "{CopyStart2} print" "{ConflictFile2}" > "{TempFolder}ThreeWayMerge•Conflict2"
  84.             End
  85.         Else
  86.             echo -n > "{TempFolder}ThreeWayMerge•Conflict2"
  87.         End
  88.         # compare the changes
  89.         set oldExit "{exit}"
  90.         set exit 0
  91.         equal -d -q "{TempFolder}ThreeWayMerge•Conflict1" "{TempFolder}ThreeWayMerge•Conflict2" 
  92.         set SameChanges "{Status}"
  93.         set exit "{oldExit}"
  94.         if "{SameChanges}" == 0
  95.             # they are equal
  96.             catenate "{TempFolder}ThreeWayMerge•Conflict1"
  97.         else
  98.             echo "    File ∂"{{ConflictFile1}}∂"; Line {CopyStart1}:{CopyEnd1}; File ∂"{{ConflictFile2}}∂"; Line {CopyStart2}:{CopyEnd2} ### CONFLICT!"  ∑∑ Dev:StdErr
  99.             echo "••• BEGIN ••• Conflict version: ∂"{ConflictFile1}∂" •••"
  100.             catenate "{TempFolder}ThreeWayMerge•Conflict1"
  101.             echo "••• ELSE •••• Conflict version: ∂"{ConflictFile2}∂" •••"
  102.             catenate "{TempFolder}ThreeWayMerge•Conflict2"
  103.             echo "••• END ••••• Conflict •••"
  104.         end
  105.  
  106.         # prepare to continue
  107.         if "{LastFileName}" == "{ConflictFile1}"
  108.             Set LastNewEnd        `evaluate "{CopyEnd1}"`
  109.             Set CopyStart        `evaluate "{CopyEnd1}" + 1`
  110.         else
  111.             Set LastNewEnd        `evaluate "{CopyEnd2}"`
  112.             Set CopyStart        `evaluate "{CopyEnd2}" + 1`
  113.         end
  114.         Set LastChangeEnd "{ConflictEnd}"
  115.         Set InConflict 0
  116.     end
  117. End
  118. if "{LastChangeEnd}" < "{ChangeStart}" ∂
  119.         && "{ChangeStart}" != "{LastChangeStart}" ∂
  120.         && "{ChangeEnd}" != "{LastChangeEnd}"
  121.     # something from the other file... check for conflicts
  122.     if "{ChangeStart}" == 9999999
  123.         # We're done, so clean up...
  124.         Set CopyEnd `count -l "{LastFileName}"`
  125.         If "{CopyStart}" < "{CopyEnd}"
  126.             #echo "#### {LastFileName} {CopyStart}:{CopyEnd}"
  127.             streamedit -d -e "{CopyStart},{CopyEnd} print" "{LastFileName}"
  128.         Else 
  129.             If "{CopyStart}" == "{CopyEnd}"
  130.                 #echo "#### {LastFileName} {CopyStart}"
  131.                 streamedit -d -e "{CopyStart} print" "{LastFileName}"
  132.             End
  133.         End
  134.         Set CopyStart "{NewStart}"
  135.     else 
  136.         if "{LastFileName}" != "" && "{FileName}" != "{LastFileName}"
  137.             # switching files, so just print out the stuff we've
  138.             # been saving up.
  139.             Set CopyEnd `evaluate "{LastNewEnd}" + "{ChangeStart}" - "{LastChangeEnd}" - 1`
  140.             If "{CopyStart}" < "{CopyEnd}"
  141.                 #echo "#### {LastFileName} {CopyStart}:{CopyEnd}"
  142.                 streamedit -d -e "{CopyStart},{CopyEnd} print" "{LastFileName}"
  143.             Else If "{CopyStart}" == "{CopyEnd}"
  144.                 #echo "#### {LastFileName} {CopyStart}"
  145.                 streamedit -d -e "{CopyStart} print" "{LastFileName}"
  146.             End
  147.             Set CopyStart "{NewStart}"
  148.         end
  149.     end
  150.     Set LastChangeEnd    "{ChangeEnd}"
  151.     Set LastChangeStart    "{ChangeStart}"
  152.     Set LastNewStart    "{NewStart}"
  153.     Set LastNewEnd        "{NewEnd}"
  154. else
  155.     # we have a conflict, so print out saved stuff up 
  156.     # to last change problem
  157.     Set CopyEnd `evaluate "{LastNewStart}" - 1`
  158.     If "{CopyStart}" < "{CopyEnd}"
  159.         #echo "#### {LastFileName} {CopyStart}:{CopyEnd}"
  160.         streamedit -d -e "{CopyStart},{CopyEnd} print" "{LastFileName}"
  161.     Else If "{CopyStart}" == "{CopyEnd}"
  162.         #echo "#### {LastFileName} {CopyStart}"
  163.         streamedit -d -e "{CopyStart} print" "{LastFileName}"
  164.     End
  165.     # now we remember where we are...
  166.     Set ConflictFile1    "{LastFileName}"
  167.     Set CopyStart1        "{LastNewStart}"
  168.     Set CopyEnd1        "{LastNewEnd}"
  169.     Set ConflictEnd1    "{LastChangeEnd}"
  170.  
  171.     Set ConflictFile2    "{FileName}"
  172.     Set CopyStart2        `evaluate "{NewStart}" - "{ChangeStart}" + "{LastChangeStart}"`
  173.     Set CopyEnd2        "{NewEnd}"
  174.     Set ConflictEnd2    "{ChangeEnd}"
  175.  
  176.     Set InConflict         1
  177.     If "{ConflictEnd1}" > "{ConflictEnd2}"
  178.         Set ConflictEnd        "{ConflictEnd1}"
  179.     Else
  180.         Set ConflictEnd        "{ConflictEnd2}"
  181.     End
  182. end
  183. Set LastFileName    "{FileName}"
  184.